<?php

class ControllerManutencaoPrivilegio extends ControllerManutencaoPadrao {

    protected function getInstanceModel() {
        return new ModelPrivilegio();
    }

    protected function getInstancePersistencia() {
        return new PersistenciaPrivilegio();
    }

    protected function getInstanceView() {
        return new ViewManutencaoPrivilegio();
    }
    
    public function run() {
        $this->processaDadosAlteracao();
        $this->setDadosModelToView();
        $this->imprime();
    }
    
    protected function setDadosModelToView() {
        $iTipoAcesso = $this->getChaveTipoAcesso();
        foreach ($this->getPersistencia()->getAllTipoAcesso($iTipoAcesso) as $oPrivilegio) {
            $this->getView()->addCampoPrivilegio($oPrivilegio);
        }
        $this->getView()->getCampoTipoAcesso()->setValor($iTipoAcesso);
        foreach ($this->getView()->getCampoTipoAcesso()->getListas() as $oOpcao) {
            if ($oOpcao->getChave() != $iTipoAcesso) {
                $this->getView()->getCampoTipoAcesso()->removeLista($oOpcao);
            }
        }
    }
    
    protected function processaDadosAlteracao() {
        if (!$this->View->isEnviada()) {
            return;
        }
        $iTipoAcesso = $this->getChaveTipoAcesso();
        $this->getPersistencia()->excluiAllTipoAcesso($iTipoAcesso);
        $this->getModel()->setTipoAcesso($iTipoAcesso);
        
        foreach ($this->Principal->getParametro('privilegio') as $sPrivilegio) {
            list($rotina, $acao) = explode('___', $sPrivilegio);
            $this->getModel()->setRotinaFormulario($rotina);
            $this->getModel()->setAcaoFormulario($acao);
            $this->getPersistencia()->insere();
        }
        
        $this->setDadosViewToModel();
        $this->View->addMensagem(new Mensagem('Registro Alterado com Sucesso!', null, Mensagem::TIPO_AVISO));
    }
    
    private function getChaveTipoAcesso() {
        $aChave = $this->Principal->getChave();
        return $aChave['funtipoacesso'];
    }
    
}
